﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Interfaces;
using Persistencia;

namespace Dominio
{
    public class Surtidor:ObjetoPersistible,IObservador
    {
        private static int _idSurtidorContador=1;
        private int _cantidadMangueras = 0;
        public int IdSurtidor { get; set; }
        private List<Manguera> mangueras;
        public int Borrado { get; set; }

        public Surtidor() {
            this.IdSurtidor = _idSurtidorContador++;
            this._cantidadMangueras = 0;
            mangueras=new List<Manguera>();
            this.Borrado = 0;
        }

        public Surtidor(int id) 
        {
            this.IdSurtidor = id;
            this._cantidadMangueras = 0;
            mangueras = new List<Manguera>();
            this.Borrado = 0;
        }

        public void Actualizar() { 
        
        }

        public void AgregarManguera(Manguera manguera) {
            this.mangueras.Add(manguera);
            this._cantidadMangueras++;
        }

        public void EliminarManguera(Manguera manguera)
        {
            manguera.Borrado = 1;
            manguera.Delete();
            this._cantidadMangueras--;
        }

        public void EliminarTodasManguera()
        {
            foreach (Manguera m in this.mangueras) {
                m.Borrado = 1;
                m.Tanque.Notificar();
            }
            this._cantidadMangueras=0;
        }

        public int GetIdSurtidor(){
            return this.IdSurtidor;
        }

        public List<Manguera> GetMangueras() {
            List<Manguera> retorno = new List<Manguera>();
            foreach (Manguera m in this.mangueras)
            {
                if (m.Borrado != 1)
                    retorno.Add(m);
            }
            return retorno;
        }

        public List<Manguera> GetTodasMangueras()
        {

            return this.mangueras;
        }

        public Manguera BuscarManguera(int idBuscado)
        {
            foreach (Manguera m in this.mangueras)
            {
                if (m.getIdManguera() == idBuscado)
                {
                    return m;
                }
            }
            return null;
        }

        public int CantidadMangueras()
        {
            return _cantidadMangueras;
        }

        public override string ToString()
        {
            return this.IdSurtidor + " " + this.GetMangueras().Count;
        }
    }
}
